#ifndef window_h__20130914_2124_45
#define window_h__20130914_2124_45

#include "factory.h"

using std::shared_ptr;
using std::unique_ptr;
using std::forward;
class Terminal;
class EditBox;
class Mediator;

class Window {
public:
  friend class Mediator;
  virtual ~Window();
  Window& height(const int& rows);
  Window& width(const int& cols);
  int height() const;
  int width() const;
  Window& size(const int& rows, const int& cols);
  Window& show();
  Window& hide();
  bool hidden() const;
  bool visible() const;
  Window& clear();
  #undef getch
  int getch() const;
  friend class Factory<Window>;
  static Factory<Window> create;
protected:
  Window();
  Window(const int& top, const int& left, 
    const int& height, const int& width);
private:
  struct P;
  unique_ptr<P> p;

};


#endif//window_h__20130914_2124_45
